距离写第一行Android代码已五月有余,现在也才稍稍敢自称”Android开发者”。在这几个月的Android学习&开发过程中,我接触了不少优秀的开源库,社区的开发者们贡献的这些功能强大的库使我的开发工作变得更加简单高效。但是对于一部分Android初学者来说,各种形式的库却让他们觉得不知所措。如何正确地使用第三方库,成为他们迫切想了解的知识。现在自己在GitHub上寻找&使用第三方库也算得心应手,特总结分享。
一般开源库有两种形式:
- 第一种是作者打包好的,格式有jar,so,aar 等。
- 第二种是作者直接以源码的形式给出并没有打包的。
一、打包好的类库(以jar包为例)
1.远程依赖库
Android Studio 使用 Gradle 构建 Android程序,使用Gradle 添加远程依赖库也变得极为简单。一般开源类库作者都会将自己打包好的类库以这种发布出来,这样我就可以直接在Gradle添加依赖使用了。下面以著名的图片缓存库fresco 为例
fresco GitHub项目地址是: https://github.com/facebook/fresco
通过项目主页的README可以知道,你只要在build.gradle 文件中加入一条compile 命令即可
If you are building with Gradle, simply add the following line to the dependencies
section of your build.gradle
file:
compile ‘com.facebook.fresco:fresco:0.8.0+’
在Android Studio 中的具体步骤:
(1). 首先将Android Studio 目录结构切换到 Android (当然这个不是必须的)
(2). 在Gradle Scripts 中找到 app/build.gradle 文件
(3). 在 dependencies 块中加入 compile 命令:
dependencies {compile 'com.facebook.fresco:fresco:0.7.0'
}
(4).执行 Gradle (或者直接运行下工程) 没有提升错误就说明成功了
但是有时候事情总不是那么一帆顺风的,一般都会给出错误提示,Google即可。
下面给出两种可能的原因
(1). 网络问题
既然说它是远程依赖库,联网是必须的。你要保证它可以访问网络。 检查File ->Setting->Gradle 下 Offline work
是否被打钩,这地方是不能勾选的。另外一个就是有可能是天朝特殊的网络环境,这个你就需要代理了。
(2) JDK 版本问题
这个问题比较奇葩,但是还是被我遇到过。Ubuntu 下默认源给的是 OpenJDK,我之前是用了 OpenJDK 7.x ,我以执行Gradle 就提示 can not resolve …. 后来换成 Oracle JDK (OpenJDK 8.x 可以)一切正常 Google官方推荐的是 Oracle JDK ,所以还是老老实实用 Oracle吧,不然指不定还会出什么问题呢!
- 导入本地类库
并不是所有的开源作者都提供了“远程依赖库”,因此我们还需要学会如何从本地导入。还是以fresco为例
(1) 首先从到https://github.com/facebook/fresco/releases/下载解压 (jar包包含在里面的libs目录下 如果自己不想找你就直接去下别人提取出来的jar包吧…)
(2) Android Studio 项目目录结构切换到 Project 进入 app->libs 目录,将jar包直接复制到这里。
(3) 右键jar包 选择 Add As Library 即可
(4) 执行Gradle
需要注意的是,如果你已经在Gradle添加了依赖就不要再在这里添加jar包了,否则会冲突!
二、直接导入项目源码
有时候开源作者并没将项目打包,这个时候我们并不需要自己再将其打包使用,偷懒直接用就好。下面以网页渲染库 HtmlSpanner 为例
HtmlSpanner 项目地址: https://github.com/NightWhistler/HtmlSpanner
(1) 首先将源码 拉到本地
(2) 将源码扔到你的项目根目录下:
(3) 在settings.gradle 文件中加入 ‘:HtmlSpanner’ 我加完之后就是 这里的HtmlSpanner要和源码文件名对应
include ':app',':HtmlSpanner'
同样的 在app/build dependencies块中添加 compile 命令
compile project(':HtmlSpanner')
(4) 执行 Gradle
但是这个项目还并没有那么简单 我执行Gradle 之后提示 can not resolve osbcp-css-parse … 我Google 了一下,osbcp-css-parse这个是一个CSS解析库。找到这个库的项目主页后,作者说这个项目停止维护了。难道不能用了?
当然不是。这只能说明我们不能直接使用“远程依赖库”。于是我把osbcp-css-parse 的jar包导入到HtmlSpanner中了,
同时将HtmlSpanner build.gradle 文件中的osbcp-css-parse依赖命令删除。这个问题解决
这还没完! 它又提示 license 文件冲突 这是因为用到的几个库里面都有个license… 这个问题还好解决
在build.gradle 文件中android 块 添加
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'exclude 'META-INF/LICENSE.txt'exclude 'META-INF/NOTICE.txt'exclude 'META-INF/NOTICE'exclude 'META-INF/LICENSE'exclude 'META-INF/DEPENDENCIES'exclude 'META-INF/notice.txt'exclude 'META-INF/license.txt'exclude 'META-INF/dependencies.txt'exclude 'META-INF/LGPL2.1'}
报错提示只提示添加 exclude ‘META-INF/NOTICE.txt’
不过多加点不会错→_→
加完后 rebuilt 就行了。
三、End
以上介绍的是我平时接触到的,也许还有其他点没说到,这个就要大家自己探索了。
文中如果如有概念等错误 烦请评论区指出。
【转载请注明出处】
Author: MummyDing
Github 主页: https://github.com/MummyDingMummyDing
2015年10月20日